package cn.tedu.io;

import java.io.*;
import java.util.Scanner;

//复制文件
public class Test3 {
    public static void main(String[] args) {
        try{
        System.out.println("请输入源文件");
        String from =new Scanner(System.in).nextLine();//1.源文件
        System.out.println("请输入目标文件");
        String to=new Scanner(System.in).nextLine();//2.目标文件
        copyOf(from,to);//3.复制
        System.out.println("文件复制完成...");
        }catch (Exception a){
            System.out.println("文件复制失败...");
        }

    }
    //复制文件
    public static void copyOf(String from, String to)  {
        InputStream in =null;//为了finally也能用
        OutputStream out =null;//为了finally也能用
        try{

        //1.读取from文件
        in =new BufferedInputStream(new FileInputStream(from));
        //2.写出to文件
        out =new BufferedOutputStream(new FileOutputStream(to));
        //3.读一个写一个
        int b=0;//定义变量，记录读到数据的长度

        long steart= System.currentTimeMillis();//开始计时ms
//        while ((b=in.read())!=-1){//一个一个的读，没数据时返回了-1
//            out.write(b);}
        byte [] buf =new byte[8192];//模拟底层的数组容量8K
        while((b=in.read())!=-1){//一个一个的读，没数据时返回了-1
//        out.write(buf);//一个数组一个数组的写,这样复制的文件会比之前的要大，因为是按照数组复制的，每次复制8192，不够的空间也是输出8192
        out.write(buf,0,b);//buf是指数据，off是指数据的起始偏移量（会自动累加）b是复制文件的大小
    }
        long  end =System.currentTimeMillis();//计时结束ms
        System.out.println(end-steart);
    }catch (Exception e){
            e.printStackTrace();
        }finally {
        //4.关闭资源
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }

    }
}
